package com.example.understandvideo.tool;

import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class FileUtils {
    /**
     * 将字符串内容写入指定路径的文件
     * @param content 要写入的字符串内容
     * @param filePath 目标文件路径
     * @throws IOException 如果发生I/O错误
     */
    public static void writeStringToFile(String content, String filePath) throws IOException {
        Files.write(Paths.get(filePath), content.getBytes());
    }
    /**
     * 对文件路径进行JSON安全编码
     * @param filePath 原始文件路径（Windows格式）
     * @return JSON安全编码后的路径
     */
    public static String encode(String filePath) {
        // 将单反斜杠替换为双反斜杠
        return filePath.replace("\\", "\\\\");
    }

    /**
     * 可选：将路径转换为正斜杠格式（跨平台兼容）
     * @param filePath 原始文件路径
     * @return 正斜杠格式路径
     */
    public static String toForwardSlashes(String filePath) {
        return filePath.replace("\\", "/");
    }

    /**
     * 获取文件的 MD5 值
     *
     * @param filepath 需要计算 MD5 的文件
     * @return 文件的 MD5 值（小写字符串）
     * @throws IOException 如果读取文件时发生错误
     */
    public static String getFileMD5(String filepath) throws IOException {
        File file = new File(filepath);
        if (!file.isFile()) {
            return null; // 非文件则返回 null
        }

        MessageDigest digest = null;
        FileInputStream fis = null;

        try {
            digest = MessageDigest.getInstance("MD5");
            fis = new FileInputStream(file);
            byte[] buffer = new byte[1024];
            int len;

            while ((len = fis.read(buffer, 0, 1024)) != -1) {
                digest.update(buffer, 0, len);
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        } finally {
            if (fis != null) {
                fis.close();
            }
        }

        // 将字节数组转换为 BigInteger，再转换为十六进制字符串
        BigInteger bigInt = new BigInteger(1, digest.digest());
        return bigInt.toString(16);
    }
}